如何理解java中的record类

您所在的位置:网站首页 set a record翻译 如何理解java中的record类

如何理解java中的record类

2023-11-02 15:37| 来源: 网络整理| 查看: 265

如何理解java中的record类 背景

java14才出来的record,类似于enum,定义了一种特殊的类。

用于标记不可变的数据类。

正常写法

定义一个用户类,一般会这么定义

//User.class public class User { private String name = null; private String password = null; public User(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public String getPassword() { return password; } @Override public boolean equals(Object o) { //用于判断是否相等 if (this == o) return true; if (!(o instanceof User)) return false; User user = (User) o; return name.equals(user.name) && password.equals(user.password); } @Override public int hashCode() { //hash算法 return Objects.hash(name, password); } @Override public String toString() { return "user{" + "name='" + name + '\'' + ", password='" + password + '\'' + '}'; } }

写个程序验证一下

public class test { public static void main(String[] args) { User1 user = new User1("XiaoMing", "123456"); User1 user2 = new User1("XiaoMing", "123456"); System.out.println(user.name()); System.out.println(user.password()); System.out.println(user); System.out.println(user.equals(user2)); } }

输出

XiaoMing 123456 User1[name=XiaoMing, password=123456] true 使用record

完成与上面相同的类,使用record,需要怎么写呢?

只用一行:

public record User1(String name,String password) {}

写个程序测试一下:

public class test { public static void main(String[] args) { User1 user = new User1("XiaoMing", "123456"); System.out.println(user.name()); System.out.println(user.password()); System.out.println(user); } }

输出:

XiaoMing 123456 User1[name=XiaoMing, password=123456]

分析:

getName方法变成了name,但是功能一样的,只是命名方式变了因为是不可变数据类型,没有set方法自动toString,虽然最后结果不一样,但是可以正常看,不是com.czcode.customer.User@b66c70b0这种玩意了自动实现equals,如果不覆盖这个方法,两个对象比较时候会比较指向的对象是不是同一个对象,这个只是比了里面的值是否相等。

总结:

这种类其实就是帮你写好了样例代码

继续进阶一下

record中可以覆盖构造方法、创建静态方法、定义自己的方法

看代码

public record User1(String name, String password) { //再定义一个构造方法 public User1(String name) { this(name, null); } //额外定义的方法 public String nameToUppercase() { return this.name.toUpperCase(); } //静态方法 public static String nameAddPassword(User1 user1) { return user1.name + user1.password; } }

测试代码

public class test { public static void main(String[] args) { User1 user = new User1("XiaoMing", "123456"); System.out.println(user.nameToUppercase()); System.out.println(User1.nameAddPassword(user)); User1 userAnotherConstructor = new User1("hello"); System.out.println(userAnotherConstructor); } }

输出

XIAOMING XiaoMing123456 User1[name=hello, password=null] 总结

这个关键字其实就相当于替你创建了一些样例代码(toSting,构造方法等),同时给你增加了一定限制条件(无法设置某个属性的值)。

有什么问题欢迎沟通学习~



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3